package com.prop.utils;

import com.aspose.words.*;
import com.aspose.words.Shape;

import org.springframework.core.io.ClassPathResource;

import java.awt.*;
import java.io.InputStream;
import java.util.Properties;

public class FileAddTextBoxInWord {

    /**
     * 在指定的 Word 文件中添加密级信息文本框。
     *
     * @param filePath Word 文件的路径。
     * @throws Exception 如果处理文件或配置过程中出现问题时抛出异常。
     */
    public static void addTextboxInWord(String filePath, String classificationLevel, String classificationPeriod)
            throws Exception {

        String messageStr = FilePropertyUtils.getClassificationContext(classificationLevel,classificationPeriod);

        // 声明 Aspose 授权
        try (InputStream AsposeLicenseFile = new ClassPathResource("license.xml").getInputStream()) {
            License license = new License();
            license.setLicense(AsposeLicenseFile);
        }


        // 从配置文件中加载属性
        Properties properties = new Properties();
        try (InputStream input = new ClassPathResource("app.properties").getInputStream()) {
            properties.load(input);
        }

        // 判断是否需要添加文本框
        boolean addTextbox = Boolean.parseBoolean(properties.getProperty("addTextboxWord", "false"));

        if (!addTextbox) {
            return; // 如果不添加文本框，直接返回
        }

        // 加载文档
        Document doc = new Document(filePath);

        // 检查文档中是否已有包含“机密”信息的文本框
        boolean containsSecret = false;
        NodeCollection shapes = doc.getFirstSection().getBody().getChildNodes(NodeType.SHAPE, true);

        for (Shape shape : (Iterable<Shape>) shapes) {
            if (shape.hasChildNodes()) {
                for (Paragraph para : (Iterable<Paragraph>) shape.getChildNodes(NodeType.PARAGRAPH, true)) {
                    String text = para.toString(SaveFormat.TEXT).trim();
                    if (text.contains("核心商密▲") || text.contains("普通商密▲") || text.contains("秘密★") || text.contains("机密★") || text.contains("非密") || text.contains("内部")) {
                        containsSecret = true;
                        break;
                    }
                }
            }
            if (containsSecret) break;
        }

        // 如果没有包含密级信息的文本框，则添加新的文本框
        if (!containsSecret) {
            Shape textbox = new Shape(doc, ShapeType.TEXT_BOX);
            textbox.setWrapType(WrapType.NONE);
            textbox.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
            textbox.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);

            // 根据配置文件中的值设置文本框的位置和大小
            textbox.setLeft(Double.parseDouble(properties.getProperty("textboxWord.left", "85")));
            textbox.setTop(Double.parseDouble(properties.getProperty("textboxWord.top", "45")));
            textbox.setWidth(Double.parseDouble(properties.getProperty("textboxWord.width", "150")));
            textbox.setHeight(Double.parseDouble(properties.getProperty("textboxWord.height", "50")));
            textbox.setFillColor(new Color(0, 0, 0, 0));  // 背景透明
            //textbox.setStrokeColor(new Color(0, 0, 0, 0));  // 边框透明
            textbox.setStroked(false);  // 取消边框

            // 从 JSON 中获取密级内容
            //String classification = FileHandlerUtils.getClassificationFromJSONStr(json);
            String classification = messageStr;

            // 创建段落和文本
            Paragraph para = new Paragraph(doc);
            Run run = new Run(doc, classification);
            run.getFont().setColor(Color.BLACK);
            run.getFont().setSize(Double.parseDouble(properties.getProperty("textboxWord.fontSize", "16")));
            run.getFont().setName(properties.getProperty("textboxWord.fontName", "黑体"));

            para.appendChild(run);
            textbox.appendChild(para);

            // 将文本框添加到文档的第一页
            doc.getFirstSection().getBody().getFirstParagraph().appendChild(textbox);

            // 保存修改后的文档，根据文件类型选择保存格式
            if (FileFormatUtil.detectFileFormat(filePath).getLoadFormat() == LoadFormat.DOC) {
                doc.save(filePath, SaveFormat.DOC);  // 保存为WPS格式
            } else {
                doc.save(filePath);  // 保存为默认的Word格式
            }
        }
    }

}
